Practical উদাহরণ: Complex Object Sorting

Java Technologies - জাভা ইউটিল.প্যাকেজ (Java.util Package) - Comparable এবং Comparator Interface
274

Java java.util প্যাকেজটি Collections Framework এর অংশ হিসেবে অনেক ধরনের ডেটা স্ট্রাকচার এবং মেথড প্রদান করে, যার মাধ্যমে বিভিন্ন ধরনের অবজেক্ট সঠিকভাবে সংরক্ষণ, অ্যাক্সেস এবং সাজানো যায়। একটি Complex Object হচ্ছে এমন একটি অবজেক্ট যেটি একাধিক প্রপার্টি ধারণ করে এবং সেটি সাধারণত Object ক্লাসের জন্য তৈরি করা হয়।

এখানে আমরা দেখব কিভাবে Complex Object Sorting করা যায়, যা একটি তালিকায় (List) থাকা Custom Objects কে sort করার জন্য Comparator বা Comparable ইন্টারফেস ব্যবহার করে।

Scenario: Sorting a List of Employees

ধরা যাক, আমাদের কাছে একটি Employee ক্লাস রয়েছে যার মধ্যে id, name, এবং salary নামক তিনটি প্রপার্টি রয়েছে। আমরা চাই যে, এই Employee অবজেক্টগুলিকে salary অনুযায়ী সাজাতে।

Step 1: Creating the Employee Class

প্রথমে আমরা একটি Employee ক্লাস তৈরি করব যেখানে তিনটি প্রপার্টি থাকবে: id, name, এবং salary

public class Employee {
    private int id;
    private String name;
    private double salary;

    // Constructor
    public Employee(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    // toString() method for printing employee details
    @Override
    public String toString() {
        return "Employee{id=" + id + ", name='" + name + "', salary=" + salary + "}";
    }
}

Step 2: Sorting Employees Using Comparable Interface

এখন আমরা Comparable ইন্টারফেস ব্যবহার করে Employee অবজেক্টগুলোকে salary অনুযায়ী সাজাবো।

Comparable ইন্টারফেসে compareTo() মেথডটি ইনপুট অবজেক্টের সাথে বর্তমান অবজেক্টের তুলনা করার জন্য ব্যবহৃত হয়। compareTo() মেথডটি negative, zero, বা positive ভ্যালু রিটার্ন করে, যা sorting order নির্ধারণ করে।

Employee Class Modified with Comparable Interface:

public class Employee implements Comparable<Employee> {
    private int id;
    private String name;
    private double salary;

    public Employee(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public int compareTo(Employee other) {
        // Sorting by salary in ascending order
        return Double.compare(this.salary, other.salary);
    }

    @Override
    public String toString() {
        return "Employee{id=" + id + ", name='" + name + "', salary=" + salary + "}";
    }
}

Step 3: Sorting the List of Employees

এখন একটি List তৈরি করে, আমরা Collections.sort() মেথড ব্যবহার করে Employee অবজেক্টগুলোকে salary অনুসারে সাজাবো।

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class EmployeeSortExample {
    public static void main(String[] args) {
        // Creating Employee objects
        Employee e1 = new Employee(1, "John", 50000);
        Employee e2 = new Employee(2, "Alice", 60000);
        Employee e3 = new Employee(3, "Bob", 45000);

        // Adding employees to the list
        List<Employee> employees = new ArrayList<>();
        employees.add(e1);
        employees.add(e2);
        employees.add(e3);

        // Sorting employees by salary using Comparable (in ascending order)
        Collections.sort(employees);

        // Displaying the sorted list
        for (Employee emp : employees) {
            System.out.println(emp);
        }
    }
}

Output:

Employee{id=3, name='Bob', salary=45000.0}
Employee{id=1, name='John', salary=50000.0}
Employee{id=2, name='Alice', salary=60000.0}

Explanation:

  • compareTo() মেথডে salary অনুযায়ী তুলনা করা হয়েছে, ফলে Employee অবজেক্টগুলো ascending order (অর্থাৎ কম থেকে বেশি) অনুসারে সাজানো হয়েছে।

Step 4: Sorting Employees Using Comparator Interface

যদি আপনি Comparable ব্যবহার না করে custom sorting করতে চান, তবে আপনি Comparator ইন্টারফেস ব্যবহার করতে পারেন। এটি আপনাকে একাধিক ক্রমে (যেমন নাম বা id) অবজেক্টগুলো সাজানোর সুযোগ দেয়।

Creating a Custom Comparator to Sort by Name:

import java.util.Comparator;

public class EmployeeNameComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee e1, Employee e2) {
        // Sorting by name in alphabetical order
        return e1.getName().compareTo(e2.getName());
    }
}

Step 5: Sorting Employees by Name Using Comparator

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class EmployeeSortByNameExample {
    public static void main(String[] args) {
        Employee e1 = new Employee(1, "John", 50000);
        Employee e2 = new Employee(2, "Alice", 60000);
        Employee e3 = new Employee(3, "Bob", 45000);

        List<Employee> employees = new ArrayList<>();
        employees.add(e1);
        employees.add(e2);
        employees.add(e3);

        // Sorting employees by name using Comparator
        Collections.sort(employees, new EmployeeNameComparator());

        // Displaying the sorted list by name
        for (Employee emp : employees) {
            System.out.println(emp);
        }
    }
}

Output:

Employee{id=2, name='Alice', salary=60000.0}
Employee{id=3, name='Bob', salary=45000.0}
Employee{id=1, name='John', salary=50000.0}

Explanation:

  • এখানে Comparator ব্যবহার করে Employee অবজেক্টগুলোকে name অনুযায়ী সাজানো হয়েছে, যেখানে alphabetical order অনুসরণ করা হয়েছে।

  • Comparable এবং Comparator ইন্টারফেস Java তে complex objects সঠিকভাবে সাজানোর জন্য শক্তিশালী টুল।
  • Comparable ইন্টারফেস ব্যবহার করে আপনি একটি নির্দিষ্ট ক্রমে অবজেক্টগুলিকে সাজাতে পারেন, যেমন salary, কিন্তু Comparator ব্যবহার করে আপনি একাধিক ক্রমে সাজানোর জন্য custom sorting করতে পারবেন (যেমন name, id ইত্যাদি)।
  • Collections.sort() মেথড বা List.sort() মেথড ব্যবহার করে আপনি সহজেই complex objects সজ্জিত করতে পারবেন।

এই দুইটি ইন্টারফেস (Comparable এবং Comparator) প্রোগ্রামিংয়ে custom object sorting এর জন্য অত্যন্ত গুরুত্বপূর্ণ এবং Java Collections Framework-এ শক্তিশালী উপাদান হিসেবে ব্যবহৃত হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...